// #include "dsgn_kernel.h"
#include <opencv2/opencv.hpp>



class PreProcess {
  private:
    // Params params_;
    float *left;
    float *right;

    // unsigned int REL_X;
    // unsigned int REL_Y;
    unsigned int old_h;
    unsigned int old_w;
    // unsigned int MAX_CROP_H;
    // unsigned int MAX_CROP_W;
    unsigned int height;
    unsigned int width;
    // unsigned int MAX_CROP_H_LIMIT;
    unsigned int origin_image_size;
    unsigned int target_image_size;


  public:
    PreProcess();
    ~PreProcess();
    
    // template <typename T>
    int Random_crop (unsigned char* output_ptr, cv::Mat ori_image, const float REL_X, const float REL_Y,
                const int old_h, const int old_w, const int MAX_CROP_H_LIMIT, 
                const int MAX_CROP_H, const int MAX_CROP_W, cudaStream_t stream);
    void print_GPU_mem(int line);
    // int generate_depth_intervals()
    
};

int read_image(std::string &image_names, std::vector<char> &raw_data);

int read_sample(std::vector<std::string> &imgs_file, 
                std::vector<std::vector<char>> &imgs_data);